package org.atovio.config.pk5;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

/**
 * ConfigurationProperties 注解表示使用Bean对象读取配置文件项
 *      prefix 前缀， 表示配置文件中 key 的公共前缀
 *      如此处三个属性在配置文件中为
 *          app:
 *            name:
 *            owner:
 *            port:
 *      则它们的公共前缀为 app
 *      注意，该注解不会使类加入到Spring容器中，需要使用额外的注解。例如 @Configuration，@Component
 * Configuration 注解。声明配置类
 *      proxyBeanMethods 属性表示是否将类设置代理，默认为true。
 *      我们不需要这个类参与到其他Bean的构建，所以可以将它设置成普通类，即将proxyBeanMethods属性值设为false
 * @author AtoVio, Winter Yuan
 */
@Configuration(proxyBeanMethods = false)
@ConfigurationProperties(prefix = "app")
public class AppBean {

    // key的名称和属性值相同
    // 属性值是非静态的
    private String name;
    private String owner;
    private Integer port;

    public AppBean() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getOwner() {
        return owner;
    }

    public void setOwner(String owner) {
        this.owner = owner;
    }

    public Integer getPort() {
        return port;
    }

    public void setPort(Integer port) {
        this.port = port;
    }

    @Override
    public String toString() {
        return "AppBean{" +
                "name='" + name + '\'' +
                ", owner='" + owner + '\'' +
                ", port=" + port +
                '}';
    }
}
